// 本文件提供创建甘特图、操作甘特图的相关全局方法。
function createGantt (el) {
  var project = new PlusProject()
  // 自定义列
  var PlanStartColumn = {
    header: '基准开始日期<br/>Date',
    field: 'PlanStart',
    width: 100,
    renderer: function (e) {
      var date = e.value
      if (!date) return ''
      return date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate()
    },
    editor: {
      type: 'datepicker'
    }
  }
  var PlanFinishColumn = {
    header: '基准完成日期<br/>Date',
    field: 'PlanFinish',
    width: 100,
    renderer: function (e) {
      var date = e.value
      if (!date) return ''
      return date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate()
    },
    editor: {
      type: 'datepicker'
    }

  }
  var EBSColumn = {
    header: 'EBS<br/>',
    field: 'EBS',
    width: 100,
    editor: {
      type: 'textbox'
    }

  }

  // 设置甘特图列
  project.setColumns([
    new PlusProject.IDColumn(),

    new PlusProject.StatusColumn(),
    new PlusProject.ManualColumn(),
    new PlusProject.NameColumn(),
    new PlusProject.PredecessorLinkColumn(),
    new PlusProject.PercentCompleteColumn(),
    new PlusProject.DurationColumn(),
    PlanStartColumn,
    PlanFinishColumn,
    new PlusProject.StartColumn(),
    new PlusProject.FinishColumn(),
    new PlusProject.ActualStartColumn(),
    new PlusProject.ActualFinishColumn(),
    new PlusProject.WorkColumn(),
    new PlusProject.DepartmentColumn(),
    new PlusProject.PrincipalColumn(),
    new PlusProject.AssignmentsColumn()

  ])

  project.on('cellcommitedit', function (e) {
    var task = e.record
    var column = e.column
    var field = e.field
    oldvalue = e.oldValue
    if (field == 'ActualStart') {
      if (e.value > task.ActualFinish && task.ActualFinish) {
        project.updateTask(task, 'ActualFinish', e.value)
      }
      project.updateTask(task, 'ActualStart', e.value)
      if (e.value) {
        // if (task.PredecessorLink.length > 0) {

        //   var predecessorUID = task.PredecessorLink[0].PredecessorUID;
        //   var link = project.getTask(predecessorUID);
        //   if (task.PredecessorLink[0].Type == 3) {
        //     var lin = parseInt((e.value - link.Start) / (1000 * 60 * 60 * 24))
        //     if (e.value < link.Start) {
        //       lin = lin;
        //     } else if (e.value > link.Start) {
        //       lin = lin;
        //     } else {
        //       lin = lin;
        //     }
        //     task.PredecessorLink[0].LinkLag = lin;

        //   } else {
        //     var lin = parseInt((e.value - link.Finish) / (1000 * 60 * 60 * 24))
        //     if (e.value < link.Finish) {
        //       lin = lin - 1;
        //     } else if (e.value > link.Finish) {
        //       lin = lin;
        //     } else {
        //       lin = lin - 1;
        //     }
        //     task.PredecessorLink[0].LinkLag = lin;
        //     task.PredecessorLink[0].Type = "1"
        //   }
        //   project.updateTask(task, "PredecessorLink", task.PredecessorLink);
        // }
        project.updateTask(task, 'PredecessorLink', [])
        project.updateTask(task, 'Start', e.value)
        if (task.ActualFinish) {
          project.updateTask(task, 'ActualFinish', task.Finish)
        }
        var pantask = project.getAncestorTasks(task) // 所有上级节点
        pantask.forEach(function (o) {
          var ch = project.getChildTasks(o)
          var i = 0
          var j = 0
          var StartData = e.value
          var FinishData = task.Finish
          ch.forEach(function (co) {
            if (co.ActualStart != null) {
              i++
              if (co.ActualStart < StartData) {
                StartData = co.ActualStart
              }
            }

            if (co.ActualFinish != null) {
              j++
              if (co.ActualFinish > FinishData) {
                FinishData = co.ActualFinish
              }
            }
          })

          project.updateTask(o, 'ActualStart', StartData)
          project.updateTask(o, 'Start', StartData)

          if (j == ch.length && task.ActualFinish) {
            project.updateTask(o, 'ActualFinish', FinishData)
            // project.updateTask(o, "Finish", FinishData);
          }
        })
      } else {
        var pantask = project.getAncestorTasks(task)
        pantask = pantask.reverse()
        pantask.forEach(function (o) {
          var ch = project.getChildTasks(o)
          var i = 0
          var StartData = e.value
          ch.forEach(function (co) {
            if (co.ActualStart == null) {
              i++
            }
            if (i == 0 || StartData == null) {
              StartData = co.ActualStart
            }

            if (co.ActualStart != null) {
              if (co.ActualStart < StartData) {
                StartData = co.ActualStart
              }
            }
            project.updateTask(o, 'ActualStart', StartData)
          })

          if (i == ch.length) {
            project.updateTask(o, 'ActualStart', null)
          }
          project.updateTask(task, 'ActualFinish', null) // 清除实际开始时间时，清除实际结束时间
          i = 0

          pantask.forEach(function (o) {
            var ch = project.getChildTasks(o)

            var FinishData = e.value
            ch.forEach(function (co) {
              if (co.ActualFinish == null) {
                i++
                if (co.ActualFinish > FinishData) {
                  FinishData = co.ActualFinish
                }
              }
            })
            if (i > 0) {
              project.updateTask(o, 'ActualFinish', null)
            }
          })
        })
      }
    }
    if (field == 'ActualFinish') {
      project.updateTask(task, 'ActualFinish', e.value)
      if (e.value) {
        project.updateTask(task, 'Finish', e.value)
        if (task.ActualStart > e.value) {
          e.value = task.ActualStart
        }
        var pantask = project.getAncestorTasks(task)
        pantask = pantask.reverse()
        pantask.forEach(function (o) {
          var ch = project.getChildTasks(o)
          var i = 0
          var FinishData = e.value
          ch.forEach(function (co) {
            if (co.ActualFinish != null) {
              i++
              if (co.ActualFinish > FinishData) {
                FinishData = co.ActualFinish
              }
            }
          })
          if (i == ch.length) {
            project.updateTask(o, 'ActualFinish', FinishData)
            project.updateTask(o, 'Finish', FinishData)
          }
        })
      } else {
        var pantask = project.getAncestorTasks(task)
        pantask = pantask.reverse()
        var i = 0
        pantask.forEach(function (o) {
          var ch = project.getChildTasks(o)

          var FinishData = e.value
          ch.forEach(function (co) {
            if (co.ActualFinish == null) {
              i++
              if (co.ActualFinish > FinishData) {
                FinishData = co.ActualFinish
              }
            }
          })
          if (i > 0) {
            project.updateTask(o, 'ActualFinish', null)
          }
        })
      }
    }

    if (field == 'PlanStart' || field == 'PlanFinish') {
      if (confirm('是否确定要修改基准计划？') == false) {
        e.cancel = true
      }
    }
    // console.log(task);

    // alert(column.hender);
    // if (task.Summary == 1) {
    //     e.cancel = true;
    // }

    // if (field == 'Duration') {
    //     e.cancel = true;
    // }
  })
  project.on('cellbeginedit', function (e) {
    var task = e.record
    var column = e.column
    var field = e.field
    // 已填写实际开始时间的   开始时间框不可编辑
    if ((field == 'Start' || field == 'PredecessorLink') && task.ActualStart != null) {
      e.cancel = true
    }
    if ((field == 'Finish' || field == 'Duration') && task.ActualFinish != null) {
      e.cancel = true
    }
    // if (field == 'PlanStart') {
    //   e.cancel = true;
    // }
    // if (field == 'PlanFinish') {
    //   e.cancel = true;
    // }
    if (field == 'ActualFinish' && !task.ActualStart) {
      e.cancel = true
    }
    if (task.children && task.children.length > 0 && field != 'Name' && field != 'PlanFinish' && field != 'PlanStart' && field != 'Principal') {
      e.cancel = true
    }
    if (task.ElementList && task.ElementList.length > 0 && (field == 'Duration' || field == 'PredecessorLink' || field == 'ActualFinish' || field == 'ActualStart' || field == 'Start' || field == 'Finish')) {
      e.cancel = true
    }
  })
  project.on('drawcell', function (e) {
    var task = e.record
    var column = e.column
    var field = e.field
    if (task.children && task.children.length > 0) {
      e.cellStyle = 'background:#ecedef'
    }
  })
  // 创建右键菜单
  var menu = new ProjectMenu()
  project.setContextMenu(menu)
  menu.edit.on('click', function (e) {
    ShowTaskWindow(project)
  })

  project.setStyle('width:100%;height:320px')

  return project
}
